package com.epower.dao.epoweruserword.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.ali.luna.commons.dao.BaseDAOImpl;
import com.epower.dao.epowerbook.EpowerBookDAO;
import com.epower.dao.epoweruserword.EpowerUserWordDAO;
import com.epower.dataobject.EpowerBookDO;
import com.epower.dataobject.EpowerUserWordDO;
import com.epower.dataobject.EpowerWordDO;

/***
 * DAO实现层
 * 
 * @author QuickDev
 * 
 */
@Scope("singleton")
@Component("epowerUserWordDAO")
public class EpowerUserWordDAOImpl extends BaseDAOImpl implements EpowerUserWordDAO {
	private EpowerBookDAO epowerBookDAO;

	/***
	 * 查询单个对象
	 */
	@Override
	public EpowerUserWordDO getEpowerUserWordByOption(EpowerUserWordDO epowerUserWord) {
		return (EpowerUserWordDO) getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.GET-EPOWERUSERWORD-BY-OPTION", epowerUserWord);
	}

	/***
	 * 查询对象列表
	 */
	@Override
	public List<EpowerUserWordDO> getEpowerUserWordListByOption(EpowerUserWordDO epowerUserWord) {
		return (List<EpowerUserWordDO>) getSqlMapClientTemplate().queryForList("EpowerUserWordDAOImpl.GET-EPOWERUSERWORDList-BY-OPTION", epowerUserWord);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EpowerBookDO> getBookListByUserId(EpowerUserWordDO query) {
		List<Integer> bookPidList = super.executeQueryForList("EpowerUserWordDAOImpl.getBookListByUserId", "EpowerUserWordDAOImpl.getBookListByUserId.count",
				query);
		List<EpowerBookDO> result = new ArrayList<EpowerBookDO>();

		for (int i : bookPidList) {
			result.add(epowerBookDAO.getEpowerBookById(i));
		}

		return result;
	}

	@Override
	public List<EpowerWordDO> getUserWordsByUserId(EpowerUserWordDO query) {
		return super.executeQueryForList("EpowerUserWordDAOImpl.getUserWordsByUserId", "EpowerUserWordDAOImpl.getUserWordsByUserId.count", query);
	}

	/***
	 * 根据id查询对象
	 */
	@Override
	public EpowerUserWordDO getEpowerUserWordById(Integer id) {
		return (EpowerUserWordDO) getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.GET-EPOWERUSERWORD-BY-ID", id);
	}

	/***
	 * 删除操作
	 */
	@Override
	public boolean deleteEpowerUserWordById(Integer id) {
		int num = getSqlMapClientTemplate().update("EpowerUserWordDAOImpl.DELETE-EPOWERUSERWORD-BY-ID", id);
		return num == 0 ? false : true;
	}

	/***
	 * 查询数量
	 */
	@Override
	public Integer getEpowerUserWordCountByOption(EpowerUserWordDO epowerUserWord) {
		return (Integer) getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.GET-EPOWERUSERWORD-COUNT-BY-OPTION", epowerUserWord);
	}

	/***
	 * 更新操作
	 */
	@Override
	public boolean updateEpowerUserWordByOption(EpowerUserWordDO epowerUserWord) {
		return getSqlMapClientTemplate().update("EpowerUserWordDAOImpl.UPDATE-EPOWERUSERWORD-BY-OPTION", epowerUserWord) > 0;

	}

	@Override
	public boolean updateEpowerUserWordLevel(int bookid, int wordid, int userid, int level) {
		Map<String, Integer> paramter = new HashMap<String, Integer>();
		paramter.put("bookid", bookid);
		paramter.put("wordid", wordid);
		paramter.put("userid", userid);
		paramter.put("level", level);
		return getSqlMapClientTemplate().update("EpowerUserWordDAOImpl.UPDATE-EPOWERUSERWORD-LEVEL", paramter) > 0;

	}

	/***
	 * 添加操作
	 * 
	 * @param
	 * @return
	 */
	@Override
	public Integer addEpowerUserWord(EpowerUserWordDO epowerUserWord) {
		return (Integer) getSqlMapClientTemplate().insert("EpowerUserWordDAOImpl.ADD-EPOWERUSERWORD", epowerUserWord);
	}

	@Override
	public String getWordImgUrl(Integer wordId) {

		return (String) getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.getWordImgUrl", wordId);

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EpowerWordDO> getEpowerWordsByOption(EpowerUserWordDO epowerUserWord) {
		return this.getSqlMapClientTemplate().queryForList("EpowerUserWordDAOImpl.getEpowerWordsByOption", epowerUserWord);
	}

	public void setEpowerBookDAO(EpowerBookDAO epowerBookDAO) {
		this.epowerBookDAO = epowerBookDAO;
	}

	@Override
	public List<Integer> getBookChildList(EpowerUserWordDO query) {

		return this.getSqlMapClientTemplate().queryForList("EpowerUserWordDAOImpl.getBookChildList", query);
	}

	@Override
	public List<EpowerWordDO> getUserCollections(EpowerUserWordDO query) {
		return super.executeQueryForList("EpowerUserWordDAOImpl.getUserCollections", "EpowerUserWordDAOImpl.getUserCollections.count", query);

	}

	@Override
	public Integer releaseCollections(Integer userId, Integer wordId) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("userid", userId);
		map.put("wordid", wordId);
		return this.getSqlMapClientTemplate().delete("EpowerUserWordDAOImpl.releaseCollections", map);

	}

	@Override
	public int getFamiliarWordCountByBookid(int bookid, int userid) {
		Map<String, Integer> paramers = new HashMap<String, Integer>();
		paramers.put("bookid", bookid);
		paramers.put("userid", userid);
		return (Integer) this.getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.GET-EPOWERUSERWORD-FAMILIARWORD", paramers);
	}

	@Override
	public int getStrangeWordCountByBookid(int bookid, int userid) {
		Map<String, Integer> paramers = new HashMap<String, Integer>();
		paramers.put("bookid", bookid);
		paramers.put("userid", userid);

		return (Integer) this.getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.GET-EPOWERUSERWORD-STRANGEWORD", paramers);
	}

	@Override
	public int queryEpowerUserWordCount(int wordid, int userid, int bookid) {
		Map<String, Integer> paramers = new HashMap<String, Integer>();
		paramers.put("wordid", wordid);
		paramers.put("userid", userid);
		paramers.put("bookid", bookid);
		return (Integer) this.getSqlMapClientTemplate().queryForObject("EpowerUserWordDAOImpl.GET-EPOWERUSERWORD-COUNT", paramers);
	}

}